home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / AMSrv_0_9.lha / AMSrv / Doc / Decisions.txt next >
Text File  |  1995-01-21  |  21KB  |  370 lines

  1. Could have a size on objects. Then, a container would have a maximum size
  2. that it could handle, and its size would be its base size plus the size of
  3. everything in it. => Don't bother. It might add a bit of realism, but likely
  4. doesn't do much for gameplay.
  5.  
  6. Could put a digital clock in the title bar of the MUD program. => Don't bother.
  7. It doesn't add much and is kinda tacky.
  8.  
  9. Might be nice in the proving grounds to have:
  10.     place to buy speed/strength/hits  (suggest prices each of 50000/50000/1000)
  11.     very occasionally find gems lying around
  12.     need place to sell them
  13.  
  14. If a picture is loaded that has no palette, it would often be useful to
  15.     reset to the default palette at that time. Then again, if a scenario
  16.     is consistently using a different palette, you wouldn't want to.
  17.     So, let's not. The scenario can force a palette if needed.
  18.  
  19. Might want to add an 'ActionToString' builtin, to return a string containing
  20. the text of a routine. The resulting string would be a pain to process,
  21. however (essentially have to write part of a proc parser in MUD code), so
  22. I don't think it would really be useful.
  23.  
  24. Could conceivably add a 'resynch' packet to the serial protocol. This could
  25. be used to re-establish a connection that MUDAgent thinks is still there,
  26. but that went away on the client end. This would only work on a direct line,
  27. however, since MUDAgent normally pays attention to CD. It could also be a
  28. big security hole - there is no way to check that the person reattaching
  29. is the same one that detached.
  30.  
  31. In the build stuff, could have button-driven entries for destroy object,
  32. move symbol, rename symbol and delete symbol. Decided not to - they are
  33. less likely to be needed and can be potentially dangerous.
  34.  
  35. Some "spam" preventing stuff can be done. I think there is a clock tick
  36. going off every second. So, when it does, check the number of inputs that
  37. have come from a client in that second (keep a count, and reset on the
  38. ticks). If it is over a threshold that is settable by a builtin call, then
  39. mark that client as spamming. In that mode, send failing replies to any
  40. request that needs a reply. For requests that don't (most), just chuck
  41. them. Hmm. Perhaps just handle the ones that need replies - they are
  42. wizard mode stuff mostly. Have another builtin-settable parameter which is
  43. how long they stay in "spamming" mode. Need to set the first to a very high
  44. value for the initial sourcing of the scenario (or anything similar).
  45.  
  46. Might also want to put limits on the number of rooms or objects that can
  47. be created by a character using the build stuff. Give some kind of message
  48. like "apply to SysAdmin for more". SysAdmin can just clear their counters.
  49.  
  50. Thought of having a 'FlashButton' graphics effect, so that when the user
  51. uses a function key for moving, I could "flash" the on-screen image of
  52. the corresponding button. I decided against this, since with a slow
  53. connection or a slow server, the flashing would be too long after the
  54. keypress to have the right feedback effect.
  55.  
  56. Had a note suggesting adding an AreaEnterCheck/AreaLeaveCheck action list.
  57. I believe this was to be used when teleporing in/out of an area, to do
  58. whatever cleanup was necessary. E.g. if a wizard teleports out of Questor's
  59. office, no-one else can go in. Decided not to do this for now - the wizard's
  60. will have to be careful.
  61.  
  62. Could add a flag to MUD and MUDAgent for "-reliable", which would indicate
  63. that the serial connection is fully reliable. Then, don't need to use CRC,
  64. ACK/NAK or sequence numbers. Decided not to do this. The gain would likely
  65. not be that much, either in CPU usage or amount of data transmitted. Also,
  66. any error or glitch encountered would hang the connection permanently.
  67.  
  68. Parser Extensions:
  69.     Would like to be able to properly parse things like:
  70.  
  71.     take a picture of the book
  72.     sit down on the bench        [currently kludged]
  73.  
  74.     This could be done either by allowing a multi-word separator
  75.     ("a,picture;of") or by allowing multi-word verbs ("take,a,picture,of").
  76.     Either requires some changes to the data structures used in memory and
  77.     in-database for grammars and verbs.
  78.  
  79.     Put off until later, if ever. (How important is it?)
  80.  
  81. Out on the nets is the concept of "Tiny-Mail", where a player can mail
  82. commands to a MUD and get the results back. Could do this for AmigaMUD.
  83. Is there any point? (It would be VERY slow to play!)
  84.  
  85. Want some kind of more intelligent/realistic NPC. This could be a lot
  86. of work. Have to think about it. Not for this release.
  87.  
  88. It might be possible to do some kind of mazewars type game with AmigaMUD.
  89. Experiments show that this would not be feasible at 2400 baud, even with
  90. effects routines. To do this, might want to increase the resolution of
  91. 'After' to 1/100 second instead of 1 second. Maybe later.
  92.  
  93. Could add a 'CreateThingWithSpace(thing parent; int propCount)', which
  94. would create a thing in the database with space pre-allocated for 'propCount'
  95. properties. Might reduce fragmentation. Probably not worth it.
  96.  
  97. The MUD client can end up temporarily suspended after typing a RETURN, so
  98. that further typing works, but hitting RETURN again doesn't work. This is
  99. carefully done in the text I/O code, but I don't quite remember the reason
  100. for it. An extra level of recursion would happen if it were allowed, and
  101. too many of these could cause problems. The situation is that the client
  102. is busy doing something (like editing, or processing effects stuff), not
  103. that the client is waiting for the server (input lines are not acknowledged).
  104.  
  105. Could have ANSI terminal output stuff. Then, players without the remote
  106. client could get a bit more than just straight text. Would need routines
  107. like ANSIOn, ANSIMove, ANSIClearLine, etc. One problem is the nature of
  108. MUDs in general - output can come at any time. A possible approach to
  109. handling this is to require that the ANSI emulator support a scrolling
  110. region, which would be used for all output not specifically directed to
  111. other parts of the screen. The scenario would have to make sure that any
  112. non-scrolling output sequences leave the cursor at the bottom left of the
  113. scrolling region. Descision: no ANSI support - we are trying to move to
  114. graphics support - ANSI support doesn't help that goal and might even
  115. hinder it.
  116.  
  117. Some MUDs have a "snoop" facility, which can let wizards or sysadmins
  118. directly watch what players are doing. This includes displaying all of
  119. their input and output. I could add such a facility to the AmigaMUD server
  120. without too much trouble, but have decided not to. The only legitimate
  121. uses of snoop that I can think of are a sysadmin watching for abusers;
  122. and for wizards to watch people playing their creations, looking for
  123. problems with them. Both of these can be handled by proper reporting.
  124. The possible abuses of a snoop facility are many.
  125.  
  126. Under V1.3 it is possible to select multiple menu items at once, by holding
  127. down the shift key. In doing so, it is possible to select any number of
  128. the items in a set which are supposed to be mutually exclusive. Because
  129. of the way Intuition reports these events, some will be missed if a given
  130. item is selected more than once. If a program just follows the codes in
  131. the menu events given to it, it can then be out of step with the checkmarks
  132. in a set of items. This can be fixed by checking the state of the checkmark
  133. flag bit before doing anything. I started to do this, but it was adding
  134. too much code to handle a rare and not fatal case. Also, later versions
  135. of the system handle this better. So, I do not handle this situation, and
  136. do not plan to do so.
  137.  
  138. It might be possible to set things up so that reliable backups of the
  139. database files can be made without shutting down the system. All structures
  140. would have to be fully flushed, just as they would on a shutdown. It isn't
  141. clear that this is done right now. Then, have a builtin that will lock
  142. the database - it will not do any write's while locked - it will wait
  143. for the lock to be released. Hmm. How is the lock released if the server
  144. is waiting? Anyway, I've decided not to persue this - the sysadmin will
  145. have to shut the server down in order to make a reliable backup. Another
  146. possibility that I haven't fully tested is having the backups done from
  147. the MUDServ program itself, using scenario code like:
  148.  
  149.     proc backup()void:
  150.     Flush();
  151.     Execute("copy MUD.#? backup");
  152.     corp;
  153.     backup().
  154.  
  155. That way, the actions are done atomically. Seems OK, but not fully tested.
  156.  
  157. Fighting in the dark is currently not allowed. Changing this, and keeping
  158. darkness consistent (i.e. you can't see where you are or who/what is there
  159. with you) would require a bunch of new checks and messages in the fighting
  160. code, including changes to the 'hit' command (how does the player decide
  161. who/what to hit if they aren't visible?). Could have 'hit it' hit some
  162. random who/what in the same location. Anyway, not done for now.
  163.  
  164. There is currently no easy way to talk about parts of objects. E.g. if we
  165. had a small box with a bunch of buttons on it, how do we set it up so
  166. that the player can 'push red button'? One way is to have pickup/drop
  167. routines on the box which add/remove invisible button objects to/from
  168. the player's carrying list. Hmm. Just checking util.m - a much better
  169. way is to add a 'push' p_oActWord to the box - that could then know about
  170. the buttons and do the right thing. A limitation here is that a given
  171. object only gets to have one 'actword'. A more general way that is not
  172. implemented in this scenario is to use grammar properties on rooms and
  173. objects, which must be checked before the main one. Note that this would
  174. require some kind of pre-parsing of the input command to pick off a direct
  175. object to look the command up on. This doesn't work well with the way
  176. that 'Parse' handles multiple sentences in an input string. Perhaps what
  177. is needed is a callout from 'Parse' that can check each individual
  178. sentence in this way. Something to think about, but nothing done for now.
  179.  
  180. It would be possible to run the MUD client with no text window, if this
  181. is requested by the scenario. In this mode, no text output should be
  182. sent from the server to the client. This could be useful for games of
  183. a slightly different flavour than the normal text MUD. All input would
  184. be keypad or mouse, and all output would be graphics/sound. One COULD
  185. fake a small text output window using the existing graphics commands and
  186. some code in a scenario. There is currently no way to do text input in
  187. this fashion - would require a 'raw' mode for other keyboard input, and
  188. a handler for such raw keys. Decided not to persue this for now.
  189.  
  190. If there is no handler for mouse regions and/or buttons, it might be
  191. nice to 'beep' if the user clicks in the graphics region. I think this
  192. is a pretty minor detail, however, so I haven't done anything about it.
  193.  
  194. I'm somewhat bothered by the inconsistent nature of the current standard
  195. scenario - it has areas of present-day modern-world stuff just down the
  196. street from fantasy stuff like the Squirrel area, and D & D medieval
  197. stuff like the Proving Grounds. There are lots of ways to blend these
  198. together better. One would be to have a 'dimensional gate' in a building
  199. on the street somewhere, and this is the opening to these other areas.
  200. The 'teleporter gizmo' idea is another one. For now, I'm not going to
  201. do either one. Perhaps if the mall/streets area gets expanded more, so
  202. that there are more quests, and more stuff to explore.
  203.  
  204. More traditional D & D stuff could be added to the Proving Grounds area.
  205. Player's could find gems/jewelry/artifacts pseudo-randomly (or in some of
  206. the "special" areas), which they can redeem at a jeweler's shop or some
  207. such. It would also be nice to be able to sell stuff back in the stores,
  208. say for half-price or something. This could reduce clutter faster than
  209. the monster-cleanup stuff. Nothing done for now.
  210.  
  211. Could write a builtin
  212.     RunCheckers(thing room; property action checkProp; thing actor)status
  213. that checks the room and all clients in the room for the prop. Any that
  214. exist are called, until one returns other than 'continue'.
  215. Not needed currently, so not done.
  216.  
  217. The text window on the MUD client should make use of 2.0 features and
  218. routines when available. It should also open a text window consistent in
  219. size and mode with the user's default settings (e.g. interlace). I'm not
  220. doing this for now - I'm more concerned with functionality, and that this
  221. version at least be useable on nearly all current Amigas.
  222.  
  223. In the current scenario, there are movement checkers in the current room,
  224. on the direction in the current room, on the player, and in the destination
  225. room. In some situations, it might be good to have some on other players
  226. or machines in either of the rooms. So that, e.g. a monster could prevent
  227. you from leaving a room. I haven't done this, partly because it would be
  228. expensive in CPU time to do, and partly because most of the functionality
  229. can be had by dynamically adding checkers as needed. E.g. the blocking
  230. done currently by monsters in the proving grounds is handled by a single
  231. checker added to the player as part of combat initialization.
  232.  
  233. I had written down that there should be a way to create machines with
  234. empty or special names, such that they won't show up when you look around
  235. the room. Not needed - just make them hidden and have null names.
  236.  
  237. It is desireable that a wizard be able to prevent others from adding to
  238. their areas. This is done by making the rooms ts_readonly. This does not
  239. prevent other wizards from making connections TO rooms, however. This
  240. is prevented by the build code, but that isn't enough for wizards. It
  241. would be possible to make the basic AmigaMUD interpreter not add a thing
  242. as a property if that thing is ts_readonly and not owned by the effective
  243. player. This could have bad consequences for purposes other than just
  244. connecting up rooms, however. It would appear that either another basic
  245. attribute of things is needed, or that the ts_ status values be expanded
  246. to handle this. This needs more thought. For now, I will do nothing.
  247.  
  248. Need some way to delete stuff in bulk. E.g. if a SysAdmin wants to delete
  249. a whole area, added either online with build commands/buttons or added
  250. by sourcing files. How is the stuff to be identified? One way would be
  251. based on the owner of the rooms. I think this could be done entirely in
  252. the scenario, but I'm not sure. The code would have to build up a list
  253. of the tables that the owning player has, and so look up in all of them
  254. every thing, action, etc. that needs deleting. How does it delete
  255. properties? There is no way to get the name of a property. This needs more
  256. thought, and perhaps user feedback. Do nothing for now.
  257.  
  258. How useful is the concept of apprentices? Are they noticeably less able
  259. to mess things up than full wizards? The only thing I can see currently
  260. is that they can't build out from rooms marked ts_wizard, whereas full
  261. wizards can. Thus, they can't mess up areas that are specifically so
  262. protected. Is this worth it?
  263.  
  264. One way of identifying areas is to have an "id" on stuff. This could be
  265. something that the player can set on themselves, and which is copied into
  266. everything they create. Could do this with the build code - is that enough,
  267. or is it wanted for wizard/apprentice direct building too? The ultimate
  268. would be to make such an identifier be something in every symbol table
  269. entry, and then have a builtin that deletes all symbols with a given id.
  270. This could lead to recursion, so would require careful implementation if
  271. it is to not loop, but still delete everything. Nothing done for now.
  272.  
  273. Something on an early list of things to do was to add some kind of
  274. server supported trigger which would idle machines when there has been
  275. no player on the MUD for a while. This would need a pair of different
  276. idle/active actions on machines. I've decided not to bother doing this.
  277. The current machines accomplish much the same thing by calling 'ClientsActive'
  278. to see if there are any active players, and making their step timing much
  279. less frequent if there aren't.
  280.  
  281. Another early desire was for a 'pageProc' on machines, and a 'page'
  282. builtin to page players/machines. This isn't needed anymore. A player
  283. can be paged using SPrint, and a machine can be triggered using 'ForceAction'.
  284.  
  285. Some MUDs have a 'gag' facility, which will prevent output from a given
  286. client X from being sent to client Y. This is set by client Y, who can
  287. do it for any number of clients. This is used to make conversations more
  288. understandable when there are lots of people in a room, or to shut out
  289. the cries of the mortals when a wizard is busy doing something. The proper
  290. place to implement this is in the server, so that the unwanted output is
  291. not even sent to the remote client. I have not done this, and I'm not sure
  292. that it will be needed on AmigaMUD - most games will not have that large
  293. a number of simultaneous players, and the wizards can always go somewhere
  294. else to work, even if they have to create and block off that somewhere.
  295. As a partial measure, the builder's guild has four separate meeting rooms
  296. that are only enterable by builders.
  297.  
  298. The AmigaMUD programming language could be made a bit more complete by
  299. allowing direct procs, as in:
  300.  
  301.     Me()@pProc := proc Print("Hello there world!\n"); fail corp.
  302.     call(Me()@pProc, status)().
  303.  
  304. to have parameters and to have result types other than 'status'. This
  305. would be conceptually nice, but I can't see any immediate need, and I
  306. would rather not mess with that bit of code right now! The current
  307. limitations can be worked around, and are certainly adequate for the
  308. procs dynamically built via 'StringToAction' by the build code.
  309.  
  310. Could rig the shifted functions keys in the MUD client to be macro keys
  311. that the user can program (e.g. via the MUD icon). Hey users! Is this
  312. something I should bother doing? How should it be set up?
  313.  
  314. It should be possible to set up profiling of MUD code. Set up a timer
  315. interrupt to go off often enough, and when it does, run through the
  316. current interpreter traceback, incrementing a counter on each function
  317. encountered. Alternatively, just increment the counter for the innermost
  318. function on the traceback. Then have a command to dump the counts on
  319. all procs in a given table. Is this of any real use? Not done for now.
  320.  
  321. If a change in prompt comes along when the MUD client input buffer is
  322. not empty (i.e. in the middle of typing some input), things get messed
  323. up a bit. I'm not too worried about this, so won't chase it.
  324.  
  325. If a remote server machine crashes, or the server is aborted, a MUD client
  326. has no way of knowing, and will sit around waiting for a reply to whatever
  327. requests it has sent. It might be useful to have a timeout applied to all
  328. requests that need a reply (not readily known outside of mud.library!),
  329. and ask the user if they want to abort if the timeout goes off without a
  330. reply. I've decided not to bother with this. In most cases, the serial
  331. protocol will time out and give up on one of its packets. The only case
  332. where this won't happen is if only the MUDServ process on the server
  333. machine bungs up, so that the MUDAgent continues to acknowledge packets
  334. at the serial level. This would also happen with a text-only connection.
  335. On a local connection, it should be fairly obvious if the server goes away.
  336.  
  337. It would be possible to handle a ^C typed on a client that is messing
  338. around with wizard-level stuff. Have the server receive messages via an
  339. interrupt, which just puts them on a queue of incoming messages. If the
  340. handler sees a ^C message (special type), and it is for the client that
  341. is currently executing in wizard mode, set the interpreter's shutdown flag
  342. right away. Decided not to do this. The execution timeout limit can handle
  343. most of the cases. A running system SHOULD have a reasonable timeout,
  344. like 5 seconds or so. Also, in a standalone environment while developing,
  345. execution of code under a long timeout can be stopped with a BREAK command
  346. from a CLI.
  347.  
  348. It would be possible to trivially encrypt the database files. This would
  349. make it harder for people to 'cheat' when trying to solve quests, etc.
  350. Decided not to do this. Someone would soon produce a decrypting program
  351. anyway.
  352.  
  353. It should be possible to allow the use of 'it' as a direct object. Just
  354. retrieve the value of It() (complain if none) and grab its p_oName. Hmm,
  355. that can't be done in the server, since it doesn't know about p_oName. So,
  356. it would have to be done in all verbs in the scenario. This wouldn't be
  357. too hard, but I'm not convinced the benefits are all that great - there
  358. are likely lots of cases where it wouldn't do what the player expected,
  359. hence most players wouldn't use it.
  360.  
  361. It would be nice if a future version of the system with higher resolution
  362. (likely only usable on AGA systems) could have a 'MUD' that is compatible
  363. with older servers. It would double all pixels sent by a lo-res scenario.
  364. In order for this to work, it would have to send its resolution to the
  365. scenario as the older, small size. To know it should do this, it needs
  366. to know the server version before the EffectsInfo data is sent to the
  367. server. Unfortunately, the EffectsInfo is currently sent in the first
  368. message from a remote client to the server, so there is no chance to do
  369. this. I guess it'll have to be a manual flag on 'MUD'.
  370.